// components/chatInput/index.js
const recorderManager = wx.getRecorderManager()
import chatService from "../../apis/chat.js";
Component({

  /**
   * 组件的属性列表
   */
  properties: {
    
  },

  /**
   * 组件的初始数据
   */
  data: {
    inputType:'voice',
    isRecording:false,
    inputVal:'',
    isCancel:false, //是否取消发送
    startPoint:null,
    waveInfo:{
      num:36
    }
  }, 

  /**
   * 组件的方法列表
   */
  methods: {
    typeChange(val){
      this.setData({
        inputType : this.data.inputType == 'voice'?'text':'voice'
      })
    },
    onInputConfirm(event){
      //点击完成按钮时触发，
      console.log('点击完成按钮时触发，',event.detail )
      this.triggerEvent('sendMsg',event.detail.value)
      this.setData({
        inputVal:''
      })
    },
    onRecordStart(e){
      //开始录音
      this.setData({
        isRecording:true,
        isCancel:false,
        startPoint:e.touches[0]
      })

      recorderManager.start({
        duration:60000,
        sampleRate:16000,
        numberOfChannels:1,
        format:'wav'
      })

      recorderManager.onStart(res=>{
        console.log('recorderManager  start==============',res)
      })

      recorderManager.onError((res) => {
        console.log('recorderManager  start  error==============',res)
       })
    },
    onTouchMove(e){
      //手指移动，当滑动距离大于25时 取消发送语音
      console.log('onTouchMove==========',e.touches[0].clientY , this.data.startPoint.clientY)
      if(this.data.startPoint.clientY - e.touches[0].clientY>25){
        this.setData({
          isCancel:true //设置为不发送语音
        })
      }else{
        this.setData({
          isCancel:false //设置发送语音
        })
      }
    },
    onTouchEnd(e){
      //手指松开 结束录音
      this.setData({
        isRecording:false
      })

      //结束录音
      recorderManager.stop()

      recorderManager.onStop(res=>{
        console.log('结束录音==========',res)
        if(this.data.isCancel) return //取消发送
        if(res.duration<1000){
          wx.showToast({
            title: '录音时间太短，请长按录音',
            icon:'none',
            duration:1000
          })
        }else{
          //进行语音发送
          const fs = wx.getFileSystemManager()
          // 同步接口
          try {
            const base64 = fs.readFileSync(res.tempFilePath, 'base64')
            chatService.voice_recognition({
              "media_format": "ogg", // 音频格式，默认wav，暂支持ogg/wav
              "base64_voice_data": base64 // 录音base64编码数据
              // "base64_voice_data": 'data:audio/x-wav;base64,'+base64 // 录音base64编码数据
            }).then(rec_res=>{
              console.log('rec_res===========',rec_res)
              this.triggerEvent('sendMsg',rec_res.data.text)
            }).catch(err=>{
              console.log('catch===========',err)
            })
          } catch(e) {
            console.error(e)
          }
        }
      })
    }
  }
})